package com.czk.stream;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author:ChenZhangKun
 * @Date: 2021/8/26 15:58
 */
public class MapStream {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            // 与老版不同的是，putIfAbent() 方法在 put 之前，  不用在写if null continue了
            // 会判断 key 是否已经存在，存在则直接返回 value, 否则 put, 再返回 value
            map.putIfAbsent(i, "val" + i);
        }
        // 执行流
        map.forEach((key, value) -> System.out.println(value));
        // 对 key 为 3 的值，内部会先判断值是否存在，存在，则做 value + key 的拼接操作
        map.computeIfPresent(3, (key, value) -> value + key);
        System.out.println(map.get(3));
        // 先判断 key 为 2 的元素是否存在，存在，则做删除操作
        map.computeIfPresent(2, (key, value) -> null);
        System.out.println(map.containsKey(2));


        // computeIfAbsent(), 当 key 不存在时，才会做相关处理
        // 如下：先判断 key 为 23 的元素是否存在，不存在，则添加
        // 与present相比，则是无则做相关操作
        map.computeIfAbsent(23, num -> "val" + num);
        System.out.println(map.containsKey(23));
        // 先判断 key 为 3 的元素是否存在，存在，则不做任何处理
        map.computeIfAbsent(3, num -> "bam");
        System.out.println(map.get(3));

        // 删除相关方法
        // 只有当给定的 key 和 value 完全匹配时，才会执行删除操作。
        boolean b = map.remove(3, "val3");
        System.out.println(b);
        // 若 key 42 不存在，则返回 not found
        String not_found = map.getOrDefault(40, "not found");
        System.out.println(not_found);


        // merge 方法，会先判断进行合并的 key 是否存在，不存在，则会添加元素
        // 若 key 的元素存在，则对 value 执行拼接操作
        map.merge(10, "new", (oldValue, newValue) -> oldValue.concat(newValue));
        // 拿到数据
        System.out.println(map.get(10));
    }
}
